package com.example.temp.controller;

import com.example.temp.common.Result;
import com.example.temp.entity.Student;
import com.example.temp.mapper.StudentMapper;
import org.apache.poi.ss.usermodel.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import org.apache.poi.xssf.usermodel.XSSFWorkbook; // 用于处理 .xlsx 文件

@RestController
@RequestMapping("/studentFile")
public class StudentFileUploadController {

    @Autowired
    private StudentMapper studentMapper;

    @PostMapping("/upload")
    public Result uploadStudentFile(@RequestParam("file") MultipartFile file) {
        try {
            // 解析 Excel 文件
            List<Student> students = parseExcelFile(file);
            // 批量插入学生数据
            int result = studentMapper.batchInsert(students);
            return Result.success(result);
        } catch (Exception e) {
            return Result.fail("批量添加学生失败: " + e.getMessage());
        }
    }

    private List<Student> parseExcelFile(MultipartFile file) throws IOException {
        List<Student> students = new ArrayList<>();
        InputStream inputStream = file.getInputStream();

        // 创建工作簿对象
        Workbook workbook = new XSSFWorkbook(inputStream); // 支持 .xlsx 文件
        Sheet sheet = workbook.getSheetAt(0); // 获取第一个工作表

        // 遍历每一行（跳过表头）
        for (int rowIndex = 1; rowIndex <= sheet.getLastRowNum(); rowIndex++) {
            Row row = sheet.getRow(rowIndex);
            if (row == null) {
                continue; // 如果行为空，跳过
            }

            // 检查是否为空行
            if (isRowEmpty(row)) {
                continue; // 如果行为空，跳过
            }

            Student student = new Student();
            // 读取并设置学生字段，确保与数据库表字段匹配
            student.setStudentID(getCellValue(row.getCell(0))); // StudentID - 学号
            student.setName(getCellValue(row.getCell(1)));      // Name - 姓名
            student.setGender(getCellValue(row.getCell(2)));    // Gender - 性别
            student.setPhone(getCellValue(row.getCell(3)));     // Phone - 联系方式
            student.setNotes(getCellValue(row.getCell(4)));     // Notes - 备注
            student.setClassName(getCellValue(row.getCell(5))); // className - 班级名称

            // 检查是否所有必填字段都有值
            if (student.getStudentID() == null || student.getName() == null || student.getGender() == null) {
                continue; // 如果必填字段为空，跳过
            }

            students.add(student);
        }

        workbook.close();
        inputStream.close();
        return students;
    }

    // 检查是否为空行
    private boolean isRowEmpty(Row row) {
        for (int cellIndex = 0; cellIndex < row.getLastCellNum(); cellIndex++) {
            Cell cell = row.getCell(cellIndex);
            if (cell != null && cell.getCellType() != CellType.BLANK) {
                return false; // 如果单元格不为空，返回 false
            }
        }
        return true; // 如果所有单元格都为空，返回 true
    }

    private String getCellValue(Cell cell) {
        if (cell == null) {
            return null; // 如果单元格为空，返回 null
        }
        switch (cell.getCellType()) {
            case STRING:
                String value = cell.getStringCellValue();
                return value.isEmpty() ? null : value; // 如果字符串为空，返回 null
            case NUMERIC:
                // 如果是数值类型，转换为字符串
                return String.valueOf((long) cell.getNumericCellValue());
            default:
                return null; // 其他类型返回 null
        }
    }
}
